//package com.aijk.web.admin.pay.servlet;
//
//import com.aijk.pay.api.WxPayServiceApi;
//import com.aijk.pay.model.Notifierinfo;
//import com.aijk.pay.model.PranListener;
//import com.aijk.pay.utils.PayMapper;
//import com.aijk.web.admin.utils.BeanFactoryUtils;
//import com.aijk.web.admin.utils.IOUtil;
//import com.aijk.web.admin.utils.XML;
//import org.apache.commons.logging.Log;
//import org.apache.commons.logging.LogFactory;
//
//import javax.servlet.ServletException;
//import javax.servlet.http.HttpServlet;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.xml.bind.JAXBException;
//import java.io.IOException;
//import java.io.InputStream;
//import java.io.PrintWriter;
//
///**
// * 微信支付结果异步通知入口
// */
//public class CPranServlet extends HttpServlet {
//
//	private static final long serialVersionUID = 3770704100717869144L;
//
//	private static final Log log = LogFactory.getLog(CPranServlet.class);
//
//	private static final String RETURN = "<xml><return_code><![CDATA[%s]]></return_code><return_msg><![CDATA[%s]]></return_msg></xml>";
//
//	private WxPayServiceApi wxPayService = null;
//
//	protected void doGet(
//			HttpServletRequest request, HttpServletResponse response)
//			throws ServletException, IOException {
//		PrintWriter writer = response.getWriter();
//		log.info("Payment Result Asynchronous Notify: ");
//		String _return_ = "";
//		try {
//			Notifierinfo notifierinfo = toObj(request.getInputStream());
//			if (wxPayService == null) {
//				wxPayService = BeanFactoryUtils.getBean("wxPayServiceApi");
//			}
//			if (wxPayService.chksign(notifierinfo)) {
//				String serialno = request.getRequestURI();
//				serialno = serialno.substring((serialno.lastIndexOf("/") + 1));
//				String listener = PayMapper.dec(serialno);
//				log.info("    PranListener: ");
//				log.info("        Calling: " + listener);
//				PranListener pranl = (PranListener) Class.forName(listener).newInstance();
//				boolean result = pranl.invoke(notifierinfo);
//				log.info("        Payment: "	+ result);
//				if (result) {
//					_return_ = String.format(RETURN, "SUCCESS", "Okey");
//				} else {
//					_return_ = String.format(RETURN, "FAIL", "Dev_Err");
//				}
//			} else {
//				_return_ = String.format(RETURN, "FAIL", "Pay_Err");
//			}
//		} catch (Exception e) {
//			log.error(e.getMessage(), e);
//			_return_ = String.format(RETURN, "FAIL", "Sys_Err");
//		}
//		log.info("    NotifyReturn: " + _return_);
//		writer.print(_return_);
//	}
//
//	private Notifierinfo toObj(String xmldat) {
//		xmldat = xmldat.replaceAll("xml", "notifierinfo");
//		log.info("    NotifyXMLDAT: "	+ xmldat);
//		try {
//			return XML.parse(xmldat , Notifierinfo.class);
//		} catch (JAXBException e) {
//			throw new RuntimeException(e);
//		}
//	}
//
//	private Notifierinfo toObj(InputStream stream) {
//		return toObj(IOUtil.stringify(stream));
//	}
//
//	protected void doPost(
//			HttpServletRequest request, HttpServletResponse response)
//			throws ServletException, IOException {
//		doGet(request, response);
//	}
//
//}
